<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<script>

    /**
     * 每个构造函数都有一个 prototype 属性, 该属性指向另一个对象
     */
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }

    Person.prototype.code = function f(time) {
        console.log(`${this.name} coding!!! ${time}`)
    }

    // 2.利用类创建对象 new
    var ldh = new Person('刘德华', 18);
    var zxy = new Person('张学友', 18);

    // ldh.code === zxy.code: true
    console.log(`ldh.code === zxy.code: ${ldh.sing === zxy.sing}`)

    ldh.sing();
    console.log(ldh)    // 对象身上系统自动添加一个 __proto__ 属性, 指向我们构造函数的原型对象

    /**
     * 方法的查找规则: 首先先看看 ldh 对象身上是否有 code 方法, 如果有就执行这个对象上的code
     * 没有code这个方法, 因为有__proto__的存在, 就去构造函数原型对象 prototype身上去查找code这个方法
     */
    // ldh.__proto__ === Person.prototype : true
    console.log(`ldh.__proto__ === Person.prototype : ${ldh.__proto__ === Person.prototype}`)
</script>
</body>
</html>
